package com.study.hot.jetpack.hilt.module

import com.study.hot.jetpack.hilt.annotation.BindElecEngine
import com.study.hot.jetpack.hilt.annotation.BindGasEngine
import com.study.hot.jetpack.hilt.model.ElecEngine
import com.study.hot.jetpack.hilt.model.Engine
import com.study.hot.jetpack.hilt.model.GasEngine
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent

/**
 * <pre>
 *     author : slx
 *     time   : 2020/11/24
 *     desc   : 帮助接口注入的中间类
 * </pre>
 */
@Module
// ActivityComponent::class：安装到Activity组件中（包括Activity中的View、Fragment），如果在其他模块例如Service，则报错
@InstallIn(ActivityComponent::class)
// 如果想在Service、Activity中同时使用，可以使用Application级别的作用范围
//@InstallIn(ApplicationComponent::class)
abstract class EngineModule {

    // 表示接口要以哪个类实例化
    @BindGasEngine
    @Binds
    abstract fun bindGasEngine(gasEngine: GasEngine): Engine

    // 如果一个接口有多个实现类，如果要注入多个实现类，就需要中间注解
    @BindElecEngine
    @Binds
    abstract fun bindElecEngine(elecEngine: ElecEngine): Engine

}